﻿// CDialogXmlCompare.cpp: 实现文件
//

#include "pch.h"
#include "HCViewerProgramm.h"
#include "afxdialogex.h"
#include "CDialogXmlCompare.h"
#include "XmlMfcOutput.h"
#include <fstream>
// CDialogXmlCompare 对话框

IMPLEMENT_DYNAMIC(CDialogXmlCompare, CDialogEx)
extern ofstream out;
CDialogXmlCompare::CDialogXmlCompare(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DIALOG_XML_COMPARE, pParent)
{

	EnableAutomation();

}

CDialogXmlCompare::~CDialogXmlCompare()
{
}

void CDialogXmlCompare::OnFinalRelease()
{
	// 释放了对自动化对象的最后一个引用后，将调用
	// OnFinalRelease。  基类将自动
	// 删除该对象。  在调用该基类之前，请添加您的
	// 对象所需的附加清理代码。

	CDialogEx::OnFinalRelease();
}

void CDialogXmlCompare::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_MFCEDITBROWSE_FILE_A, m_EditBrowseFileA);
	DDX_Control(pDX, IDC_MFCEDITBROWSE_FILE_B, m_EditBrowseFileB);
}


BEGIN_MESSAGE_MAP(CDialogXmlCompare, CDialogEx)
	ON_EN_CHANGE(IDC_MFCEDITBROWSE_FILE_A, &CDialogXmlCompare::OnEnChangeMfceditbrowseFileA)
	ON_EN_CHANGE(IDC_MFCEDITBROWSE_FILE_B, &CDialogXmlCompare::OnEnChangeMfceditbrowseFileB)
	ON_BN_CLICKED(IDOK, &CDialogXmlCompare::OnBnClickedOk)
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(CDialogXmlCompare, CDialogEx)
END_DISPATCH_MAP()

// 注意: 我们添加了对 IID_IDialogXmlCompare 的支持来支持类型安全绑定
//  以支持来自 VBA 的类型安全绑定。  此 IID 必须同附加到 .IDL 文件中的
//  调度接口的 GUID 匹配。

// {e402a8de-2123-4b20-9263-98cf5fb844fc}
static const IID IID_IDialogXmlCompare =
{0xe402a8de,0x2123,0x4b20,{0x92,0x63,0x98,0xcf,0x5f,0xb8,0x44,0xfc}};

BEGIN_INTERFACE_MAP(CDialogXmlCompare, CDialogEx)
	INTERFACE_PART(CDialogXmlCompare, IID_IDialogXmlCompare, Dispatch)
END_INTERFACE_MAP()


// CDialogXmlCompare 消息处理程序

BOOL CDialogXmlCompare::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	m_fileDirA = "";
	m_fileDirB = "";
	m_EditBrowseFileA.EnableFileBrowseButton();
	m_EditBrowseFileA.SetFileType(_T("Xml Files (*.xml)|*.XML||"));
	m_EditBrowseFileB.EnableFileBrowseButton();
	m_EditBrowseFileB.SetFileType(_T("Xml Files (*.xml)|*.XML||"));
	// TODO:  在此添加额外的初始化
	(CButton*)GetDlgItem(IDOK)->EnableWindow(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CDialogXmlCompare::OnEnChangeMfceditbrowseFileA()
{
	// TODO:  如果该控件是 RICHEDIT 控件，它将不
	// 发送此通知，除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask()，
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
	CString strFilePathA;
	m_EditBrowseFileA.GetWindowText(strFilePathA);
	if (strFilePathA == _T("") || (((strFilePathA.Right(4)).CompareNoCase(_T(".xml")) != 0)|| ((strFilePathA.Right(4)).CompareNoCase(_T(".XML")) != 0)))
	{
		//AfxMessageBox(_T("please choose right AID file!"));
		AfxMessageBox(_T("请选择正确参数文件"));
		return;
	}
	m_fileDirA = CT2A(strFilePathA.GetString());
	if (!m_fileDirA.empty() && !m_fileDirB.empty())
	{
		(CButton*)GetDlgItem(IDOK)->EnableWindow(true);
	}
	// TODO:  在此添加控件通知处理程序代码
}

void CDialogXmlCompare::OnEnChangeMfceditbrowseFileB()
{
	// TODO:  如果该控件是 RICHEDIT 控件，它将不
	// 发送此通知，除非重写 CDialogEx::OnInitDialog()
	// 函数并调用 CRichEditCtrl().SetEventMask()，
	// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
	CString strFilePathB;
	m_EditBrowseFileB.GetWindowText(strFilePathB);
	if (strFilePathB == _T("") || (((strFilePathB.Right(4)).CompareNoCase(_T(".xml")) != 0) || ((strFilePathB.Right(4)).CompareNoCase(_T(".XML")) != 0)))
	{
		//AfxMessageBox(_T("please choose right AID file!"));
		AfxMessageBox(_T("请选择正确参数文件"));
		return;
	}
	m_fileDirB = CT2A(strFilePathB.GetString());
	if (!m_fileDirA.empty() && !m_fileDirB.empty())
	{
		(CButton*)GetDlgItem(IDOK)->EnableWindow(true);
	}
	// TODO:  在此添加控件通知处理程序代码
}

void CDialogXmlCompare::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	vector<string> loadlist;
	this->ShowWindow(SW_HIDE);
	int ret= parseXmlWithCompare(m_fileDirA, m_fileDirB, loadlist);
//#ifdef DEBUG
	for (auto it : loadlist)
	{
		out << "loadlist " << it << endl;
	}
//#endif
	this->ShowWindow(SW_SHOW);
	CDialogEx::OnOK();
}
